package com.xxxtea.config;

import com.xxxtea.common.Constants;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

/**
 * Swagger API文档配置类
 * 
 * 配置Swagger API文档生成，包括：
 * - API文档基本信息
 * - 扫描包路径配置
 * - 文档版本信息
 * - OpenAPI 3.0规范支持
 * 
 * @author badman
 * @since 1.0.0
 */
@Configuration
public class SwaggerConfig {
	
	/**
	 * 应用名称
	 * 从配置文件中读取，用于API文档标题
	 */
	@Value("${spring.application.name}")
	private String appName;

	/**
	 * 配置Swagger Docket
	 * 设置API文档的基本配置和扫描范围
	 * 
	 * @return Swagger Docket配置
	 */
	@Bean
	public Docket api() {
		return new Docket(DocumentationType.OAS_30)  // 使用OpenAPI 3.0规范
				.select()
				.apis(RequestHandlerSelectors.basePackage(Constants.BASE_PACKAGE))  // 扫描指定包下的控制器
				.paths(PathSelectors.any())  // 扫描所有路径
				.build()
				.apiInfo(apiInfo());  // 设置API文档信息
	}

	/**
	 * 配置API文档基本信息
	 * 设置文档标题、版本等信息
	 * 
	 * @return API文档信息
	 */
	private ApiInfo apiInfo() {
		return new ApiInfoBuilder()
				.title(appName + "系统API文档")  // 文档标题
				.version("1.0.0")  // 文档版本
				.build();
	}
}